package com.platform.apex.util;

import org.slf4j.LoggerFactory;

public class Logger {

	private final org.slf4j.Logger log;

	public Logger(String name) {
		log = LoggerFactory.getLogger(name);
	}

	public Logger(Class clazz) {
		log = LoggerFactory.getLogger(clazz);
	}

	public void trace(String message, Object... formatArgs) {
		if (log.isTraceEnabled()) {
			log.trace(StringUtils.safeFormat(message, formatArgs));
		}
	}

	public void trace(Throwable t, String message, Object... formatArgs) {
		if (log.isTraceEnabled()) {
			log.trace(StringUtils.safeFormat(message, formatArgs), t);
		}
	}

	public void debug(String message, Object... formatArgs) {
		if (log.isDebugEnabled()) {
			log.debug(StringUtils.safeFormat(message, formatArgs));
		}
	}

	public void debug(Throwable t, String message, Object... formatArgs) {
		if (log.isDebugEnabled()) {
			log.debug(StringUtils.safeFormat(message, formatArgs), t);
		}
	}

	public void info(String message, Object... formatArgs) {
		if (log.isInfoEnabled()) {
			log.info(StringUtils.safeFormat(message, formatArgs));
		}
	}

	public void info(Throwable t, String message, Object... formatArgs) {
		if (log.isInfoEnabled()) {
			log.info(StringUtils.safeFormat(message, formatArgs), t);
		}
	}

	public void warn(String message, Object... formatArgs) {
		log.warn(StringUtils.safeFormat(message, formatArgs));
	}

	public void warn(Throwable t, String message, Object... formatArgs) {
		log.warn(StringUtils.safeFormat(message, formatArgs), t);
	}

	public void error(String message, Object... formatArgs) {
		log.error(StringUtils.safeFormat(message, formatArgs));
	}

	public void error(Throwable t, String message, Object... formatArgs) {
		log.error(StringUtils.safeFormat(message, formatArgs), t);
	}

	public void wtf(String message, Object... formatArgs) {
		log.error(StringUtils.safeFormat("WTF?!: " + message, formatArgs),
				new Exception());
	}

	public void wtf(Throwable t, String message, Object... formatArgs) {
		log.error(StringUtils.safeFormat("WTF?!: " + message, formatArgs), t);
	}

	public boolean isTraceEnabled() {
		return log.isTraceEnabled();
	}

	public boolean isDebugEnabled() {
		return log.isDebugEnabled();
	}

	public boolean isInfoEnabled() {
		return log.isInfoEnabled();
	}
}
